第 11 章  ·  实战:智能旅行规划Agent_阅读指南

第11章 第8节 实战:智能旅行规划Agent_阅读指南


第11章 第8节 实战:智能旅行规划Agent

阅读指南

前面七节我们学习了Agent的理论、架构、能力和实现范式。现在,是时候把这些知识串起来,动手实现一个真正能用的Agent了。
本节我们将实现一个智能旅行规划Agent。你只需告诉它预算、时间和偏好,它就能自动生成一份完整的旅行方案——从目的地推荐到行程安排,从景点选择到预算分配。
这不是一个玩具项目。它融合了我们学过的所有核心能力:


8.1 项目需求与功能设计

核心需求

作为一个智能旅行规划助手,Agent 需要接收用户的输入——预算范围、旅行天数、出发城市和旅行偏好;然后输出推荐的目的地、完整每日行程、预算分配方案和实用建议。

进阶方面,它还需要记住用户的历史偏好(下次规划时自动参考),能够理解模糊需求(比如"想去个不太热的地方"),具备推理能力("5月去哪里最合适?"/"预算不够怎么调整?")。

功能拆解

根据前面学习的四步范式,将Agent拆分为:

Step 1: 需求理解与分析

Step 2: 目的地检索与匹配

Step 3: 行程规划推理(CoT)

Step 4: 方案生成与记忆更新


8.2 技术架构设计

整体架构

我们采用混合实现范式

核心模块

1. LLM调用模块——支持QWen API,提供统一调用接口,包含错误处理和重试机制。

2. 记忆管理模块——短期记忆保存当前对话上下文,长期记忆以JSON文件持久化存储用户画像,支持读取和更新。

3. 目的地知识库——简化版硬编码常见目的地数据,包含城市名、适合季节、主要景点、预算区间、标签等。

4. 推理引擎——实现Chain of Thought推理,生成可读的思考过程,基于推理结果生成行程。


8.3 项目结构与源码说明

项目目录结构

/travel_planner_agent/
├── README.md                    # 完整的项目说明和使用指南
├── requirements.txt             # Python依赖
├── .env.example                 # 环境变量模板
├── config.py                    # 配置文件(API密钥等)
├── main.py                      # 主程序入口
├── agent/
│   ├── __init__.py
│   ├── travel_agent.py         # Agent核心逻辑(四步流程)
│   ├── llm_client.py           # LLM调用封装
│   ├── memory_manager.py       # 记忆系统
│   └── prompts.py              # Prompt模板
├── data/
│   ├── destinations.json       # 目的地知识库
│   └── user_profiles/          # 用户画像存储目录
│       └── user_example.json   # 示例用户画像
└── utils/
    ├── __init__.py
    └── helpers.py              # 辅助函数

源码说明

本项目的完整源码位于:samples/chapter11/travel_planner_agent/

核心文件说明:

1. travel_agent.py——实现四步决策流程,每步都有详细注释,展示如何组织Agent的主逻辑。

2. memory_manager.py——实现短期和长期记忆,演示如何持久化用户画像,包含记忆的读取、更新、保存逻辑。

3. llm_client.py——封装LLM调用,支持多种模型切换,提供错误处理和重试机制。

4. prompts.py——所有Prompt模板集中管理,包含需求理解、推理规划等各个步骤的Prompt,展示如何设计高质量的Prompt。

5. README.md——完整的项目介绍、安装和运行指南、代码逻辑详解(对应正文的四步流程)、扩展建议。


8.4 关键实现要点

如何实现Chain of Thought推理

在Step 3(行程规划推理)中,我们让LLM显式地进行思考:

# 核心思想:通过Prompt引导LLM进行分步推理
reasoning_prompt = """
请按以下步骤思考如何规划行程:

Thought 1: 分析目的地特点和用户偏好的匹配度
Thought 2: 考虑{days}天的合理分配(每天不要太累)
Thought 3: 思考景点之间的距离和交通
Thought 4: 预算{budget}元如何分配(交通、住宿、餐饮、门票)
Thought 5: 综合以上因素,制定最优行程

最后给出详细的每日行程安排。
"""

详细实现请查看源码:agent/travel_agent.py_plan_itinerary() 方法。

如何设计记忆系统

采用简单但实用的方案:短期记忆保存在内存中,对话结束后清空;长期记忆以JSON文件持久化存储用户画像。

# 短期记忆:保存在内存中,对话结束后清空
chat_history = [
    {"role": "user", "content": "我想去海边"},
    {"role": "assistant", "content": "推荐三亚..."}
]

# 长期记忆:保存为JSON文件,持久化存储
user_profile = {
    "user_id": "user_001",
    "travel_style": "休闲度假",  # 从历史对话中总结
    "budget_range": "5000-8000",
    "preferred_destinations": ["海滨城市", "古城"],
    "travel_history": [
        {"date": "2024-05", "destination": "三亚", "satisfaction": 5}
    ]
}

详细实现请查看源码:agent/memory_manager.py

如何选择实现范式

采用混合模式:Code-driven部分负责四步流程的顺序执行、记忆的读取和保存、异常处理;Prompt-driven部分负责需求理解(提取关键信息)、推理规划(CoT思考)、方案生成(自然语言输出)。

这种混合方式既保证了流程的稳定性,又保留了LLM的灵活性。


8.5 如何运行和测试

快速开始

# 1. 进入项目目录
cd samples/chapter11/travel_planner_agent/

# 2. 安装依赖
pip install -r requirements.txt

# 3. 配置API密钥
# 方式1(推荐):设置系统环境变量
export DASHSCOPE_API_KEY=你的通义千问API密钥

# 方式2:直接修改 config.py 文件
# 在 config.py 中找到 DASHSCOPE_API_KEY = "your-qwen-api-key"
# 将其改为你的实际API密钥

# 4. 运行
python main.py

测试用例

运行后,尝试以下输入:

测试1:基础需求

用户输入:我想5月份去旅游,预算5000元,喜欢海边,有5天时间

测试2:模糊需求

用户输入:想找个不太热的地方,放松一下,不要太商业化

测试3:预算限制

用户输入:3000元能去哪里玩3天?想看山

观察Agent如何理解需求、推理规划、生成方案。

8.6 下一节预告

单个Agent的能力终究有限。在复杂的现实场景中,往往需要多个Agent协同工作才能解决问题。接下来的第12章,我们将深入探讨Agent的未来发展方向——从当前的技术局限到通向AGI的可能路径,为你揭示智能体技术的演进蓝图和发展前景。


8.7 ■ 学点英语

中文 English 音标 说明
旅行规划智能体 Travel Planner Agent /ˈtrævl ˈplænər ˈeɪdʒənt/ 根据预算、时间和偏好自动规划旅行方案的Agent
行程规划 Itinerary Planning /aɪˈtɪnərəri ˈplænɪŋ/ Agent将天数、预算和景点信息综合为每日行程的过程
用户画像 User Profile /ˈjuːzər ˈproʊfaɪl/ 记录用户旅行偏好和历史数据的持久化信息
目的地知识库 Destination Knowledge Base /ˌdestɪˈneɪʃn ˈnɒlɪdʒ beɪs/ 包含城市信息、景点、预算区间的结构化数据集
混合范式 Hybrid Paradigm /ˈhaɪbrɪd ˈpærədaɪm/ 代码定义流程+LLM负责推理生成的Agent实现方式
思维链推理 CoT Reasoning /siː oʊ tiː ˈriːzənɪŋ/ Agent在行程规划中通过分步思考得出最优方案的机制
Agent 的实现范式对比 多Agent协作:从个体到群体智能
本节目录